/**
 * Alipay.com Inc.
 * Copyright (c) 2004-2016 All Rights Reserved.
 */
package com.alipay.study.common.util.log;

import org.apache.log4j.Logger;

/**
 * 
 * @author wb-qlj205528
 * @version $Id: LogUtil.java, v 0.1 2016年11月9日 上午11:24:53 wb-qlj205528 Exp $
 */
public final class LogUtil {
    /**
     * 禁用构造函数
     */
    private LogUtil() {
    }

    /**
     * 生成<font color="blue">调试</font>级别日志<br>
     * 可处理任意多个输入参数，并避免在日志级别不够时字符串拼接带来的资源浪费
     *
     * @param logger    日志对象
     * @param obj       泛型对象列表
     */
    public static void debug(Logger logger, Object... obj) {
        if (logger == null) {
            return;
        }
        if (logger.isDebugEnabled()) {
            logger.debug(getLogString(obj));
        }
    }

    /**
     * 生成<font color="blue">通知</font>级别日志<br>
     * 可处理任意多个输入参数，并避免在日志级别不够时字符串拼接带来的资源浪费
     *
     * @param logger    日志对象
     * @param obj       泛型对象列表
     */
    public static void info(Logger logger, Object... obj) {
        if (logger == null) {
            return;
        }
        if (logger.isInfoEnabled()) {
            logger.info(getLogString(obj));
        }
    }

    /**
     * 生成<font color="brown">警告</font>级别日志<br>
     * 可处理任意多个输入参数，并避免在日志级别不够时字符串拼接带来的资源浪费
     *
     * @param logger    日志对象
     * @param obj       泛型对象列表
     */
    public static void warn(Logger logger, Object... obj) {
        if (logger != null) {
            logger.warn(getLogString(obj));
        }
    }

    /**
     * 生成<font color="brown">警告</font>级别日志<br>
     * 可处理任意多个输入参数，并避免在日志级别不够时字符串拼接带来的资源浪费
     *
     * @param logger    日志对象
     * @param ex        异常堆栈
     * @param obj       泛型对象列表
     */
    public static void warn(Logger logger, Throwable ex, Object... obj) {
        if (logger != null) {
            logger.warn(getLogString(obj), ex);
        }
    }

    /**
     * 生成<font color="red">错误</font>级别日志<br>
     * 可处理任意多个输入参数，并避免在日志级别不够时字符串拼接带来的资源浪费
     *
     * @param logger    日志对象
     * @param throwable 异常栈对象
     * @param obj       泛型对象列表     
     */
    public static void error(Logger logger, Throwable throwable, Object... obj) {
        if (logger != null) {
            logger.error(getLogString(obj), throwable);
        }
    }

    /**
     * 生成<font color="red">错误</font>级别日志<br>
     * 可处理任意多个输入参数，并避免在日志级别不够时字符串拼接带来的资源浪费
     *
     * @param logger    日志对象
     * @param obj       泛型对象列表     
     */
    public static void error(Logger logger, Object... obj) {
        if (logger != null) {
            logger.error(getLogString(obj));
        }
    }

    /**
    * 生成输出到日志的字符串
    *
    * @param obj    泛型对象列表
    * @return       输出对象序列化字符串
    */
    public static String getLogString(Object... objs) {
        StringBuilder log = new StringBuilder();
        for (Object obj : objs) {
            log.append(obj);
        }
        return log.toString();
    }
}
